#ifndef Node_H
#define Node_H
#include<iostream>
using namespace std;

template < typename Dato >
class Node
{
    private:
     Dato dato;
     Node* psig;

    public:
        // Constructor con parámetro
        // PRE:  Ninguna
        // POST: Crea un Node con el dato d
        //       y el puntero a NULL
        Node(Dato d);

        // Destructor
        // PRE:  Node creado
        // POST: No hace nada
        ~Node();

        // Setea el dato (lo cambia)
        // PRE:  el Node tiene que estar creado
        // POST: El Node queda con el dato d
        void set_dato(Dato d);

        // Obtener el dato
        // PRE:  Node creado
        // POST: devuelve el dato que contiene el Node
        Dato get_dato();

        // Setear el puntero al siguiente Node
        // PRE:  Node creado
        // POST: el puntero al siguiente Node apuntará a ps
        void set_siguiente(Node* ps);

        // Obtener el puntero al Node siguiente
        // PRE:  Node creado
        // POST: Devuelve el puntero al siguiente Node
        //       Si es el último devuelve NULL
        Node* get_siguiente();
};


template < typename Dato >
Node<Dato>::Node(Dato d)
{

 dato=d;
 psig=0;   //ctor
}

template < typename Dato >
Node<Dato>::~Node()
{

    //dtor
}

template < typename Dato >
void  Node<Dato>::set_dato(Dato d)
{
 dato=d;
}

template < typename Dato >
Dato Node<Dato>::get_dato()
 {
   return dato;
 }

template < typename Dato >
 void Node<Dato>::set_siguiente(Node* ps)
  {
   psig=ps;
  }

template < typename Dato >
 Node<Dato>* Node<Dato>::get_siguiente()
  {
    return psig;
  }

#endif // Node_H
